【Informatica CDI】S3からSnowflakeへのデータロード

【Informatica CDI】S3からSnowflakeへのデータロード

Clock Icon2025.01.01

はじめに

データ事業本部ビッグデータチームのkasamaです。今回はS3からSnowflakeへのデータロードを試してみたいと思います。S3からSnowflakeへはInformaticaを使わずともSnowflakeのCOPYコマンドでできますが、Infomaticaだとノーコードでできるという利点があります。

https://dev.classmethod.jp/articles/snowflake-storage-integration-s3load/

以下を参考に進めます。
https://docs.informatica.com/ja_jp/integration-cloud/data-integration-connectors/current-version/_snowflake-data-cloud-connector_cloud-data-integration-connectors_current-version_ditamap/GUID-CE9372AA-2934-4A58-A7A2-0FD83E31B86F.html

前提条件

1. Snowflakeの初期設定

まずはSnowflake側でSQLを実行し、初期設定を行います。WAREHOUSEやユーザーはデフォルトを活用し、その他は今回用に作成します。

---> set Warehouse Context
USE WAREHOUSE compute_wh;

-- database作成
CREATE DATABASE IF NOT EXISTS cm_kasama_infa_db;

-- schema作成
CREATE SCHEMA IF NOT EXISTS cm_kasama_infa_db.s3_data;

-- table作成
CREATE OR REPLACE TABLE cm_kasama_infa_db.s3_data.calendar
(
  full_date DATE,
  day_name VARCHAR(10),
  month_name VARCHAR(10),
  day_number VARCHAR(2),
  full_year VARCHAR(4),
  holiday BOOLEAN
);

-- ETL用ロールの作成
CREATE ROLE etl_role;

-- ウェアハウスの使用権限
GRANT USAGE ON WAREHOUSE COMPUTE_WH TO ROLE etl_role;

-- データベースへのフル権限(現在と将来)
GRANT ALL ON DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON ALL SCHEMAS IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON FUTURE SCHEMAS IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON ALL TABLES IN DATABASE cm_kasama_infa_db TO ROLE etl_role;
GRANT ALL ON FUTURE TABLES IN DATABASE cm_kasama_infa_db TO ROLE etl_role;

-- ユーザーにロール付与
GRANT ROLE etl_role TO USER KASAMA;

2. S3 サンプルデータの準備

以下の内容でCSVファイルを作成し、S3 BucketへUploadします。

calendar.csv
full_date,day_name,month_name,day_number,full_year,holiday
2024-01-01,Monday,January,01,2024,true
2024-01-02,Tuesday,January,02,2024,false
2024-01-03,Wednesday,January,03,2024,false
2024-01-04,Friday,January,04,2024,true

3. Informatica CloudのSnowflake接続の作成

管理者画面の接続新しい接続の作成からタイプSnowflake Data Cloudを選択し、接続情報を入力します。

※ 以下リンクに記載の通り、Snowflake Cloud Data Warehouseは古いコネクタのようですので、Snowflake Data Cloudを使用しましょう。
FAQ: What is the difference between Snowflake Data Cloud (Informatica Cloud) and Snowflake Cloud Data Warehouse (Informatica) connector in Informatica Cloud product ?

Screenshot 2024-12-29 at 16.25.44

  • 接続名: 任意のコネクタ名
    タイプ: Snowflake Data Cloud
  • 認証: 標準
  • ユーザー名: Snowflake上でSELECT CURRENT_USER();で表示された値
  • パスワード: 上記ユーザーに紐づくパスワード
  • アカウント: Snowflakeの画面上でアカウントアカウントURLをコピーで取得できるURLのhttps://.snowflakecomputing.comの間の値
  • ウェアハウス: COMPUTE_WH
  • ロール: etl_role

マッピング作成

  1. ソースの設定
    • S3接続を選択
    • ファイルパス: source/snowflake/calendar.csv
    • ヘッダー行あり: チェック

Screenshot 2024-12-29 at 16.42.11

  1. 式の定義
    • フィールド名: exp_full_date
    • タイプ: date/time
    • 式: To_Date(full_date, 'YYYY-MM-DD')

Screenshot 2024-12-29 at 16.42.40

  1. ターゲットの設定
    • Snowflake接続を選択
    • テーブル: calendar
    • 操作: Insert
    • full_dateは先ほどのexp_full_dateをマッピング

Screenshot 2024-12-29 at 16.43.25

実行結果確認

マッピング実行し、問題なく成功しました。

Screenshot 2024-12-29 at 16.44.55

Snowflake上でもデータ確認できました。

SELECT * FROM cm_kasama_infa_db.s3_data.calendar;

Screenshot 2024-12-29 at 16.45.29

クリーンアップ(必要な場合)

-- データベースを削除
DROP DATABASE IF EXISTS cm_kasama_infa_db;
-- ロールの付与解除
REVOKE ROLE etl_role FROM USER KASAMA;
-- ロールを削除
DROP ROLE IF EXISTS etl_role;

最後に

接続情報にはいくつかパターンがあり、最も簡易的なパターンで試したので、プロジェクトで実際に扱う際は再度検討したいと思います。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.